複数の Flutter 画面またはビュー
シナリオ
Flutter を既存のアプリに統合する場合は、 または、既存のアプリを段階的に移行して Flutter を使用することもできます。 複数追加したくなるかもしれません 同じプロジェクトにインスタンスを flutterします。 特に、これは次のような場合に役立ちます。 次のシナリオ:
- 統合された Flutter 画面がリーフ ノードではないアプリケーション ナビゲーション グラフとナビゲーション スタックは、以下のハイブリッド混合物である可能性があります。 ネイティブ -> flutter -> ネイティブ -> flutter。
- 複数の部分画面 Flutter ビューが統合される可能性がある画面 そしてすぐに見える。
複数の Flutter インスタンスを使用する利点は、それぞれのインスタンスが インスタンスは独立しており、独自の内部ナビゲーションを維持します スタック、UI、アプリケーションの状態。これにより、アプリケーション コード全体が簡素化されます。 状態を維持する責任があり、モジュール性が向上します。詳細については、 複数の Flutter の使用を動機付けるシナリオは、次の場所にあります。flutter.dev/go/multiple-flutters。
Flutter 2 以降はこのシナリオ向けに最適化されており、増分は低くなります。 Flutter インスタンスを追加するためのメモリ コスト (~180kB)。この固定費は 削減により、複数の Flutter インスタンス パターンをより自由に使用できるようになります アプリへの追加統合で。
コンポーネント
Android と iOS の両方に複数の Flutter インスタンスを追加するための主要な API
新しいものに基づいていますFlutterEngineGroup
クラス (Android API、iOS API)
構築するFlutterEngine
ではなく、FlutterEngine
以前に使用されたコンストラクター。
一方、FlutterEngine
API は直接的で使いやすかったため、FlutterEngine
同じものから生まれたFlutterEngineGroup
パフォーマンスがある
GPU などの共通の再利用可能なリソースの多くを共有する利点
コンテキスト、フォント メトリック、グループ スナップショットの分離により、初期処理の高速化につながります。
レンダリングの遅延とメモリ使用量の削減。
-
FlutterEngine
から生み出されたFlutterEngineGroup
に使用できます 次のような UI クラスに接続しますFlutterActivity
またFlutterViewController
通常構築されたキャッシュと同じ方法でFlutterEngine
s. -
最初
FlutterEngine
から生み出されたFlutterEngineGroup
必要ありません その後の人生のために生き残るためにFlutterEngine
共有する 少なくとも 1 人が生きている限り、リソースが得られますFlutterEngine
まったく 回。 -
一番最初の作成
FlutterEngine
からFlutterEngineGroup
もっている 同じ性能特性を構築するようにFlutterEngine
以前に行ったコンストラクターを使用します。 -
いつすべて
FlutterEngine
からのFlutterEngineGroup
破壊され、次はFlutterEngine
作成されたものは、実際のものと同じパフォーマンス特性を持っています。 最初のエンジン。 -
の
FlutterEngineGroup
それ自体は、生成されたすべてのオブジェクトを超えて存続する必要はありません エンジン。を破壊するFlutterEngineGroup
既存のスポーンされたものには影響しませんFlutterEngine
ただし、追加のスポーン機能は削除されますFlutterEngine
既存の生成されたエンジンとリソースを共有します。
コミュニケーション
Flutter インスタンス間の通信は次を使用して処理されます。プラットフォームチャネル(また鳩) ホストプラットフォーム経由。コミュニケーションに関するロードマップを確認するには、 または複数の Flutter インスタンスを強化するためのその他の計画された作業については、チェックしてください。問題 72009。
サンプル
使用方法を示すサンプルを見つけることができますFlutterEngineGroup
Android と iOS の両方でGitHub。